package com.vvv.designpattern.controller;

import com.vvv.designpattern.adapter.Login3rdAdapter;
import com.vvv.designpattern.pojo.UserInfo;
import com.vvv.designpattern.service.UserBridgeService;
import com.vvv.designpattern.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * @author vvv
 * @date 2023-11-14 15 09
 * discription
 * 桥接模式的调用流程是 controller -> service -> AbstractRegisterLoginComponent
 *                          -> RegisterLoginFuncInterface
 *  第三方登录地址：
 * https://gitee.com/oauth/authorize?client_id=5b0295ed32f04822e1f3997f017afc7948699cae854130d9dbba333531c9ebf5&redirect_uri=http://localhost:8081/bridge/gitee&response_type=code&state=GITEE
 *
 * 桥接模式实现复杂，但是扩展性强，后序扩展其他的第三方登录，只需要去右路去多写一个对应的实现类即可，然后再去controller去写一个回调方法
 * 我觉得左路主要的作用就是起到了一个中转的作用，将不同的第三方登录用一个String type来识别，然后通过工厂类去创建对应的右路实现
 * 这样让我们后序的扩展只需要去添加一个右路的具体实现即可
 *
 * 这里的业务是：
 * 提供第三方的登录方式
 */
@RestController
@RequestMapping("/bridge")
public class UserBridgeController {

    @Resource
    private UserBridgeService userBridgeService;

    /**
     * gitee第三方登录的回调方法
     * @param request
     * @return
     */
    @GetMapping("/gitee")
    public String gitee(HttpServletRequest request) {
        return userBridgeService.login3rd(request, "GITEE");
    }

    @PostMapping("/login")
    public String login(String account, String password) {
        return userBridgeService.login(account, password);
    }

    @PostMapping("/register")
    public String register(@RequestBody UserInfo userInfo) {
        return userBridgeService.register(userInfo);
    }
}
